package com.sunrise.configuracoes.bean;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ComponentSystemEvent;

import lombok.Getter;

import org.springframework.stereotype.Controller;

import com.sunrise.configuracoes.servico.ManterPerfilService;
import com.sunrise.configuracoes.servico.ManterUsuarioService;
import com.sunrise.configuracoes.visao.UsuarioForm;
import com.sunrise.generico.bean.ManterBean;
import com.sunrise.generico.entidade.Perfil;
import com.sunrise.generico.entidade.Usuario;
import com.sunrise.generico.enums.TipoStatus;
import com.sunrise.generico.util.MessagesUtil;
import com.sunrise.generico.util.facebook.FacebookUser;
import com.sunrise.generico.visao.Filtro;

@ManagedBean
@ViewScoped
@Controller
public class ManterConfiguracoesPessoaisBean extends ManterBean<Usuario> {

	@Resource
	@Getter
	private ManterPerfilService perfilService;

	@Resource
	@Getter
	private ManterUsuarioService usuarioService;
	
	@Resource
	@Getter
	private UsuarioForm formulario;

	@Override
	public void inicializarEntidade() {
		setEntidade(new Usuario());
		setStatus(Arrays.asList(TipoStatus.values()));
		setFiltro(new Filtro());
		getEntidade().setPerfil(new Perfil());
		getEntidade().setAtivo(Boolean.TRUE);
	}

	@Override
	public List<Usuario> iniciarlizarListEntidade() {
		return new ArrayList<Usuario>();
	}

	public void preRenderEditUsuarioLogado(ComponentSystemEvent event) {
		getFormulario().setPerfis(getPerfilService().listarOrdenado());
		setEntidade(obterUsuarioLogado());
	}

	public void alterarConfiguracoesPessoais() {
		getService().alterar(getEntidade());
		MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("alteradoSucesso"));
	}

	public void validarEmail() {
		if (getEntidade().getEmail() != null && !getEntidade().getEmail().isEmpty()) {
			Pattern p = Pattern.compile("^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$");
			Matcher m = p.matcher(getEntidade().getEmail());
			if (!m.matches()) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("emailInvalido"));
			}
		}
	}

	public void carregarUsuariosFacebook() {
		String[] resultado = getFormulario().getResultGraph().split("<>");
		if (resultado.length < 3) {
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("nenhumPerfilEncontrado"));
		} else {
			getFormulario().setFacebookUsers(new ArrayList<FacebookUser>());
			FacebookUser user = null;
			for (int cont = 0; cont < resultado.length; cont++) {
				user = new FacebookUser();
				user.setId(resultado[cont++]);
				user.setName(resultado[cont++]);
				user.setPicture(resultado[cont]);
				getFormulario().getFacebookUsers().add(user);
			}

			getFormulario().setResultGraph("");
		}
	}

	public void limparFacebookUsers() {
		getFormulario().setFacebookUsers(new ArrayList<FacebookUser>());
	}

	public void associarPerfil() {
		getEntidade().setFacebookLogin(getFormulario().getUsuarioSelecionado().getId());
	}

}
